Floating-point describes a system for numerical representation in which a string of digits (or bits) represents a rational number. There are several different floating-point representations used in computers. The most commonly encountered representation is the one defined in the IEEE 754 standard. The main advantage of floating-point representation over fixed-point and integer representation is that it can support a much wider range of values. A fixed-point representation that has seven decimal digits, with the decimal point assumed to be positioned after the 5th digit, can e.g. represent the numbers 12345.67, 8765.43, 123.00 etc., whereas a floating-point representation such as the IEEE 754 decimal32 format with seven decimal digits can additionally represent e.g. 0.00001234567, 123456700000, 1.234567, 123456.7 etc. The floating-point format needs only slightly more storage, since it needs to encode the position of the radix point.
Floating-point representation is similar in concept to scientific notation. Logically a floating-point number consists of mantissa and exponent. Mantissa is a signed digit string of a given length in a given base (or radix). It is also called “significand” or just “coefficient”. The radix point is not explicitly included, but is implicitly assumed to lie always in a certain position within the significand, often just after or just before the most significant digit, or to the right of the rightmost digit. Conventionally, the radix point is just after the most significant (leftmost) digit. The length of the significand determines the precision.
Exponent is a signed integer exponent also referred to as the characteristic or scale, which modifies the magnitude of the number.
Floating-point numbers are typically packed into a computer datum as sign bit, exponent field, and significand (also called mantissa), from left to right. For the IEEE 754 binary formats they are apportioned as follows:
TABLE 1IEEE 754 binary formats for floating-point dataExponentTypeSignExponentbiasSignificandtotalHalf (IEEE 754r)15151016Single181272332Double11110235264Quad11516383112128
When a binary number is normalized, the leftmost bit of the significand is known to be 1. In the IEEE binary interchange formats, this bit is not actually stored in the computer datum. It is called the “hidden” or “implicit” bit. Because of this, single precision format actually has a significand with 24 bits of precision, double precision format has 53, and quad has 113. For example, a floating-point datum may consist of (from left to right, or most significant bit MSB to least significant bit LSB) 1 bit sign, 8 bits exponent and 23 bits mantissa. Since also the exponent may be negative, it is added with a bias of 127. E.g., a floating-point value may have the values: sign=0; e=1; s=1100.1001.0000.1111.1101.1011 (including the hidden bit). The sum of the exponent bias and the exponent is 128, so this is represented in single precision format as 0100.0000.0100.1001.0000.1111.1101.1011 (excluding the hidden bit), or 40490FDB as a hexadecimal number.
Further, 3D meshes are widely used in various applications to represent 3D objects. Their raw representation usually requires a huge amount of data, while most applications demand compact representation of 3D meshes for storage and transmission. Therefore, many algorithms for efficiently compressing 3D meshes have been proposed. Typically, 3D meshes are represented by three types of data: Topology data (also called connectivity data), which describe the adjacency relationship between vertices, geometry data, which specify vertex locations, and property data, which specify attributes such as the normal vector, material reflectance and texture coordinates. Most widely-used 3D compression algorithms compress topology data and geometry data separately. The coding order of geometry data is determined by the underlying topology coding. Geometry data is usually compressed by three main steps: quantization, prediction and entropy coding. 3D mesh property data are usually compressed by a similar method as geometry compression.
Texture coordinates are used for assigning texture image positions to vertices. That is, texture coordinates determine how pixels in the texture are mapped to the surface of a triangle in object space, as shown in FIG. 1. The per-vertex assignment of texture coordinates is the key to mapping a texture image to rendered geometry. In 3D mesh coding, each vertex has a texture coordinate group (x,y), which consists of floating-point data. The coordinates are normalized to a range of [0, . . . , 1]. A conventional compression method for floating-point texture coordinates can be described as normalization, prediction and residue encoding. For prediction, various prediction schemes are known to get a prediction value of texture coordinates, e.g. parallelogram prediction. This scheme is also widely used for geometry data prediction. The resulting residue is a floating-point value that comprises exponent, sign and mantissa. If the floating point value is too small, e.g. smaller than 2−12, then it can usually be treated as zero. If it is bigger than a threshold, then further compression is done.
Normally, exponent, sign and mantissa are compressed separately. For each of them, a context based coding scheme as well as arithmetic coding (e.g. range encoder) can be employed. A conventional compression scheme can be found in “Lossless Compression of Floating-Point Geometry” by Martin Isenburg, Peter Lindstrom and Jack Snoeyink, Proceedings of CAD'3D, May 2004. Revised journal version in Computer-Aided Design, Volume 37, Issue 8, pages 869-877, July 2005.